package com.kinghood.productcenter.service.product;

import com.kinghood.productcenter.common.model.dao.product.ProductAttributeDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kinghood.productcenter.common.model.dto.product.AttributeByProductIdDTO;
import com.kinghood.productcenter.common.model.vo.base.BaseAttributeVO;
import com.kinghood.productcenter.common.model.vo.product.ProductAttributeListVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author KingHood
 * @since 2023-12-20
 */
public interface IProductAttributeService extends IService<ProductAttributeDO> {

    /**
     * 根据产品id和属性id查询
     *
     * @param showAttributeList 显示属性列表
     * @param productList       产品列表
     * @author jp
     * @date 2023/12/25
     */
    Map<Long, List<ProductAttributeListVO>> getProductAttributeByCode(List<String> showAttributeList, List<Long> productList);

    Map<Long, List<ProductAttributeListVO>> getSkuAttributeByCode(List<String> showAttributeList, List<Long> skuList);

    /**
     * 根据产品id和属性code查询
     *
     * @param showAttributeList 显示属性列表
     * @param productList       产品列表
     * @author jp
     * @date 2023/12/25
     */
    Map<Long, Map<String, ProductAttributeListVO>> getAllAttributeByCode(List<String> showAttributeList, List<Long> productList);

    /**
     * 通过代码获取所有sku属性
     *
     * @param showAttributeList 显示属性列表
     * @param skuList           SKU列表
     * @return @return {@link Map }<{@link Long }, {@link Map }<{@link String }, {@link ProductAttributeListVO }>>
     * @author jp
     * @date 2024/01/23 17:34
     */
    Map<Long, Map<String, ProductAttributeListVO>> getAllSkuAttributeByCode(List<String> showAttributeList, List<Long> skuList);

    /**
     * 删除商品的关联属性
     *
     * @param id 商品id
     * @param templateAttributeIdList 模板的属性id
     * @param skuTypeList sku
     * @param idList 业务id
     * @author zfj
     * @date 2023/12/26
     */
    void deleteByProductId(Long id, List<Long> templateAttributeIdList, List<Integer> skuTypeList, List<Long> idList);

    /**
     * 批量保存属性
     *
     * @param attributes 入参
     * @param productId 商品id
	 * @param businessId 业务id
	 * @param businessType 业务类型
	 * @param attributeMap 属性
     * @author zfj
     * @date 2023/12/26
     */
    void saveList(Map<String,Object> attributes,Long productId, Long businessId, int businessType, Map<String, BaseAttributeVO> attributeMap);

    /**
     * 根据商品id获取商品属性
     *
     * @param id 商品id
     * @param typeList 筛选类型
     * @return 商品属性
     * @author zfj
     * @date 2023/12/26
     */
    List<ProductAttributeDO> getByProductId(Long id, List<Integer> typeList);

    /**
     * 根据商品id获取属性
     *
     * @param id 商品id
     * @return 商品属性
     * @author zfj
     * @date 2024/1/11
     */
    List<AttributeByProductIdDTO> getAttributeByProductId(Long id);

    /**
     * 删除sku，sku附件，sku供应商
     *
     * @param productId         商品id
     * @param noDeleteSkuIdList 不删除的skuId
     * @author zfj
     * @date 2024/1/15
     */
    void deleteSkuAttribute(Long productId, List<Long> noDeleteSkuIdList);

    /**
     * 根据款式id获取到款式属性
     *
     * @param productIdList 款式id
     * @return 款式属性
     * @author zfj
     * @date 2024/2/2
     */
    List<ProductAttributeDO> getProductInfo(List<Long> productIdList);
}
